package com.titanic.ventapasajes.repositorio; import java.io.Serializable; import java.util.List; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.PersistenceException; import org.apache.commons.lang3.StringUtils; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.criterion.MatchMode; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import com.titanic.ventapasajes.modelo.Usuario; import com.titanic.ventapasajes.repositorio.filtros.UsuarioFiltros; import com.titanic.ventapasajes.service.NegocioExcepciones; import com.titanic.ventapasajes.util.jpa.Transaccion; public class UsuarioRepositorio implements Serializable{ private static final long serialVersionUID = 1L; @Inject private EntityManager entityManager; public Usuario buscarUsuarioporId(Long ideUsuario) { return this.entityManager.find(Usuario.class, ideUsuario); } public List<Usuario> listarVendedores() { return this.entityManager.createQuery("from Usuario", Usuario.class) .getResultList(); } public Usuario buscarUsuarioporEmail(String email) { Usuario usuario; try{ usuario = this.entityManager.createQuery("from Usuario where lower(email) = :email and activo=true", Usuario.class) .setParameter("email", email).getSingleResult(); }catch(NoResultException e){ usuario = null; } return usuario; } @SuppressWarnings("unchecked") public List<Usuario> listarUsuariosFiltrados(UsuarioFiltros usuarioFiltros) { Session session = entityManager.unwrap(Session.class); Criteria criteria = session.createCriteria(Usuario.class); if(StringUtils.isNotBlank(usuarioFiltros.getEmail())){ criteria.add(Restrictions.eq("email", usuarioFiltros.getEmail())); } if(StringUtils.isNotBlank(usuarioFiltros.getNombre())){ criteria.add(Restrictions.ilike("nombreUsuario", usuarioFiltros.getNombre(), MatchMode.ANYWHERE)); } return criteria.addOrder(Order.asc("nombreUsuario")).list(); } @Transaccion public void removerUsuario(Usuario usuario) { try{ usuario = obtenerUsuario(usuario.getIdeUsuario()); entityManager.remove(usuario); entityManager.flush(); }catch(PersistenceException e){ throw new NegocioExcepciones("El usuario no puede ser eliminado."); } } public Usuario obtenerUsuario(Long id){ return entityManager.find(Usuario.class, id); } public Usuario adicionarUsuario(Usuario usuario) { return entityManager.merge(usuario); } }